// 这是一个没有封装的平衡二叉树的实现
// 有bug,树的最后形态由问题. 不知道出错在哪里...

#ifndef C_ALGORITHM_AVL_TREE_H
#define C_ALGORITHM_AVL_TREE_H

// 不完整类型定义
typedef struct avl_node_t *avl_node;

struct avl_node_t {
  int key;
  avl_node left;
  avl_node right;
  int height;
};

avl_node new_node(int key);

avl_node min_node(avl_node node);

avl_node LL_rotation(avl_node node);

avl_node LL_rotation(avl_node node);

avl_node LR_rotation(avl_node node);

avl_node RL_rotation(avl_node node);

avl_node insert(avl_node node, int key);

avl_node delete (avl_node node, int queryNum);

avl_node search(avl_node node, int queryNum);

void pre_order(avl_node node);

void in_order(avl_node node);

void post_order(avl_node node);

#endif